class Solution {
public:
    /*
    准备两个栈，一个正常，一个则作为min栈
    只有当min栈为空或者当前元素比min栈的栈顶元素小，才能入min栈
    出栈的时候，如果正常栈的栈顶元素和min栈的栈顶元素一样，min栈才pop,否则只有正常栈pop
    */
    void push(int value) {
        s.push(value);
        if(smin.empty()||value<=smin.top())
            smin.push(value);
    }
    void pop() {
        //这两个步骤不能反
        if(s.top()==smin.top())
            smin.pop();
        s.pop();
    }
    int top() {
        return s.top();
    }
    int min() {
        return smin.top();
    }
private:
    stack<int>s,smin;
};